//Artigo de Kang 2000
#ifndef APROXIMATEDIMPLICIT_H
#define APROXIMATEDIMPLICIT_H
#include "integrationMethod.h"


class AproximatedImplicit : public IntegrationMethod
{
    public:
        AproximatedImplicit ();
        AproximatedImplicit (double, double, std::vector<State>, std::vector< std::vector<Particle *> > &, std::vector< std::vector<Spring *> > &, bool, int, double,  double,  double, Vector3D);
        ~AproximatedImplicit ();

        void calculate(bool, unsigned int, double);



    private:

    std::vector<double> stiffnessResult(const std::vector<Particle *>& , unsigned int);
    Vector3D neighbourForceCalulate(const Matrix&, Vector, const std::vector<double>&, unsigned int, unsigned int);
    void implicitCalculation(State *, double, double, Vector , const std::vector<double>&, const Vector3D& , const Vector3D&, const Vector3D&, unsigned int, unsigned int);




};

#endif // APROXIMATEDIMPLICIT_H

